/*
 * Created on 24/06/2005
 *
 */
package com.master.bd.calculo_frete;

import java.sql.*;

import com.master.ed.*;
import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;

/**
 * @author Tiago
 *
 */
public class Calcula_Frete_Sedex extends Calcula_Frete{


    public Calcula_Frete_Sedex(ExecutaSQL executasql) {
        super(executasql);
        // // ("Calcula_Frete_Sedex 1");
    }


    public void calcula(Calcula_FreteED ed)
    throws Excecoes{


            Localiza_Tabela = new Localiza_Tabela(this.executasql);
            Tabela_FreteBean tabelaFreteED = new Tabela_FreteBean();

            ed.setLocalizado("N");
            ed.setDM_Tem_Cidade("S");
            ed.setDM_Tem_Peso("N");
            ed.setDM_Tem_Modal("S");
            ed.setDM_Tem_Validade("N");
            ed.setDM_Tem_Vigencia("N");
            ed.setDM_Tem_Empresa("N");
            ed.setDM_Tem_Regiao_Estado("S");
            ed.setDM_Tem_Estado("S");
            ed.setDM_Tem_Subregiao("N");
            ed.setDM_Tem_Regiao_Pais("N");
            ed.setDM_Tem_Pais("S");
            ed.setDM_Tabela_Reversa("N");
            ed.setDM_Tem_Tabela_Unidade("N");
            ed.setDM_Tem_Produto("S");

            ed.setDM_Percurso_Busca("Origem_Destino");


                // // ("Localiza_Tabela Calcula_Frete_Expresso ---");

                tabelaFreteED = Localiza_Tabela.escolheTabela(ed);


                if ("S".equals(tabelaFreteED.getDM_Localizado())) {
                  // // ("achou tabela- oid >> " + tabelaFreteED.getOID());

                    this.calculaFretePeso(tabelaFreteED, ed);

                    this.calculaFreteValor(tabelaFreteED, ed);

                    this.calculaTaxaRedespacho(tabelaFreteED , ed);

                    // // ("calculou tudo ");

                }
    }

    protected void calculaFretePeso( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            // // ("achou tabela- getNR_Peso - =======>> " + ed.getNR_Peso());
            // // ("achou tabela- getNR_Peso_Tabela >> " + ed.getNR_Peso_Tabela());
            // // ("achou tabela- getVL_D_Ate025C >> " + tabelaFreteED.getVL_D_Ate025C());
            // // ("achou tabela- getVL_D_Ate001C >> " + tabelaFreteED.getVL_D_Ate001C());

            Tipo_Movimento = "FP";
            VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate025C ();//001
            double ultimo_peso=0.25;//001

            if (ed.getNR_Peso_Tabela () > 0.25 && tabelaFreteED.getVL_D_Ate025C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate025C ();
              ultimo_peso=0.25;
            }          
          
            if (ed.getNR_Peso_Tabela () > 0.3 && tabelaFreteED.getVL_D_Ate050C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate050C ();
              ultimo_peso=0.5;
            }          

            if (ed.getNR_Peso_Tabela () > 0.50 && tabelaFreteED.getVL_D_Ate075C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate075C ();
              ultimo_peso=0.75;
            }          

            if (ed.getNR_Peso_Tabela () > 0.75 && tabelaFreteED.getVL_D_Ate1C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate1C ();
              ultimo_peso=1;
            }          
          
            if (ed.getNR_Peso_Tabela () > 1 && tabelaFreteED.getVL_D_Ate2C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate2C ();
              ultimo_peso=2;
            }          
          
            if (ed.getNR_Peso_Tabela () > 2 && tabelaFreteED.getVL_D_Ate3C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate3C ();
              ultimo_peso=3;
            }          
          
            if (ed.getNR_Peso_Tabela () > 3 && tabelaFreteED.getVL_D_Ate4C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate4C ();
              ultimo_peso=4;
            }          
          
            if (ed.getNR_Peso_Tabela () > 4 && tabelaFreteED.getVL_D_Ate5C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate5C ();
              ultimo_peso=5;
            }          
          
            if (ed.getNR_Peso_Tabela () > 5 && tabelaFreteED.getVL_D_Ate6C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate6C ();
              ultimo_peso=6;
            }          

            if (ed.getNR_Peso_Tabela () > 6 && tabelaFreteED.getVL_D_Ate7C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate7C ();
              ultimo_peso=7;
            }          

            if (ed.getNR_Peso_Tabela () > 7 && tabelaFreteED.getVL_D_Ate8C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate8C ();
              ultimo_peso=8;
            }          

            if (ed.getNR_Peso_Tabela () > 8 && tabelaFreteED.getVL_D_Ate9C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate9C ();
              ultimo_peso=9;
            }          
          
            if (ed.getNR_Peso_Tabela () > 9 && tabelaFreteED.getVL_D_Ate10C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate10C ();
              ultimo_peso=10;
            }          
          
            if (ed.getNR_Peso_Tabela () > 10 && tabelaFreteED.getVL_D_Ate11C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate11C ();
              ultimo_peso=11;
            }          
          
            if (ed.getNR_Peso_Tabela () > 11 && tabelaFreteED.getVL_D_Ate12C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate12C ();
              ultimo_peso=12;
            }          

            if (ed.getNR_Peso_Tabela () > 12 && tabelaFreteED.getVL_D_Ate13C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate13C ();
              ultimo_peso=13;
            }          
          
            if (ed.getNR_Peso_Tabela () > 13 && tabelaFreteED.getVL_D_Ate14C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate14C ();
              ultimo_peso=14;
            }          
          
            if (ed.getNR_Peso_Tabela () > 14 && tabelaFreteED.getVL_D_Ate15C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate15C ();
              ultimo_peso=15;
            }          
          
            if (ed.getNR_Peso_Tabela () > 15 && tabelaFreteED.getVL_D_Ate16C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate16C ();
              ultimo_peso=16;
            }          
          
            if (ed.getNR_Peso_Tabela () > 16 && tabelaFreteED.getVL_D_Ate17C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate17C ();
              ultimo_peso=17;
            }          
          
            if (ed.getNR_Peso_Tabela () > 17 && tabelaFreteED.getVL_D_Ate18C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate18C ();
              ultimo_peso=18;
            }          
          
            if (ed.getNR_Peso_Tabela () > 18 && tabelaFreteED.getVL_D_Ate19C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate19C ();
              ultimo_peso=19;
            }          
          
            if (ed.getNR_Peso_Tabela () > 19 && tabelaFreteED.getVL_D_Ate20C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate20C ();
              ultimo_peso=20;
            }          
          
            if (ed.getNR_Peso_Tabela () > 20 && tabelaFreteED.getVL_D_Ate21C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate21C ();
              ultimo_peso=21;
            }          
          
            if (ed.getNR_Peso_Tabela () > 21 && tabelaFreteED.getVL_D_Ate22C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate22C ();
              ultimo_peso=22;
            }          
          
            if (ed.getNR_Peso_Tabela () > 22 && tabelaFreteED.getVL_D_Ate23C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate23C ();
              ultimo_peso=23;
            }          
          
            if (ed.getNR_Peso_Tabela () > 23 && tabelaFreteED.getVL_D_Ate24C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate24C ();
              ultimo_peso=24;
            }          
          
            if (ed.getNR_Peso_Tabela () > 24 && tabelaFreteED.getVL_D_Ate25C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate25C ();
              ultimo_peso=25;
            }          
          
            if (ed.getNR_Peso_Tabela () > 25 && tabelaFreteED.getVL_D_Ate26C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate26C ();
              ultimo_peso=26;
            }          
          
            if (ed.getNR_Peso_Tabela () > 26 && tabelaFreteED.getVL_D_Ate27C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate27C ();
              ultimo_peso=27;
            }          
          
            if (ed.getNR_Peso_Tabela () > 27 && tabelaFreteED.getVL_D_Ate28C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate28C ();
              ultimo_peso=28;
            }          
          
            if (ed.getNR_Peso_Tabela () > 28 && tabelaFreteED.getVL_D_Ate29C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate29C ();
              ultimo_peso=29;
            }          
          
            if (ed.getNR_Peso_Tabela () > 29 && tabelaFreteED.getVL_D_Ate30C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate30C ();
              ultimo_peso=30;
            }          
          
            if (ed.getNR_Peso_Tabela () > 30 && tabelaFreteED.getVL_D_Ate31C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate31C ();
              ultimo_peso=31;
            }          

            if (ed.getNR_Peso_Tabela () > 31 && tabelaFreteED.getVL_D_Ate32C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate32C ();
              ultimo_peso=32;
            }          

            if (ed.getNR_Peso_Tabela () > 32 && tabelaFreteED.getVL_D_Ate33C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate33C ();
              ultimo_peso=33;
            }          

            if (ed.getNR_Peso_Tabela () > 33 && tabelaFreteED.getVL_D_Ate34C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate34C ();
              ultimo_peso=34;
            }          

            if (ed.getNR_Peso_Tabela () > 34 && tabelaFreteED.getVL_D_Ate35C ()>0){
              VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate35C ();
              ultimo_peso=35;
            }          

            // // ("achou tabela- VL_Movimento_Frete >> " + VL_Movimento_Frete);
          
            if (ed.getNR_Peso_Tabela () > ultimo_peso) {
              double peso_exc=0;
              while ((peso_exc+ultimo_peso)<ed.getNR_Peso_Tabela ()){
                peso_exc++;
              }
              VL_Movimento_Frete += (tabelaFreteED.getVL_D_ExcedenteC () * peso_exc);
            }

            // // ("achou tabela- VL_Movimento_Frete >> " + VL_Movimento_Frete);
          
            ed.setCD_Tipo_Movimento (Tipo_Movimento);
            ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
            ed.setVL_Movimento (VL_Movimento_Frete);
            this.incluiMovimento (ed);
    }


    protected void calculaFreteValor(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------AD VALOREM--------------------------------------------------
            Tipo_Movimento = "AV";
            VL_Movimento_Frete = (ed.getVL_Nota_Fiscal() * tabelaFreteED.getPE_D_Ad_Valorem() / 100);

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);

    }

    protected void calculaTaxaRedespacho(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------TX Redespacho--------------------------------------------------
            Tipo_Movimento = "TXR";
            VL_Movimento_Frete=tabelaFreteED.getVL_TX_Redespacho();

            if (ed.getNR_Peso() >tabelaFreteED.getNR_Peso_TX_Redespacho()){
              VL_Movimento_Frete += tabelaFreteED.getVL_Excesso_TX_Redespacho() * (ed.getNR_Peso()-tabelaFreteED.getNR_Peso_TX_Redespacho());
            }
            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }


}
